home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / CRS / crs53.d81 / 28may87s.pma / CXPRINTE.ASM < prev    next >
Assembly Source File  |  1979-12-31  |  2KB  |  140 lines

  1.  
  2.     title    'CXPRINTER    Commodore printer drivers    4 Dec 85'
  3.  
  4.     maclib    z80
  5.  
  6.     maclib    cxequ
  7.  
  8.     public    ?PT$I$1101,?PT$O$1,?pt$o$2
  9.     public    ?convt
  10. ;    public    ?PT$S$1101
  11.  
  12.     extrn    ?fun65
  13.  
  14. ;
  15. ;    printer output in register C
  16. ;
  17.     dseg
  18. ?pt$o$2:
  19.     lhld    prt$conv$2
  20.     call    do$convt        ; C must be unchanged A=desired code
  21.     lxi    h,prt$buf$2
  22.     mvi    b,5
  23.     jr    prt$cont
  24.  
  25. do$convt:
  26.     mov    a,c            ; A=desired code
  27.     mvi    c,7            ; C=secondary address
  28.     pchl                ; HL,DE and B may be used
  29.  
  30. ?pt$o$1:
  31.     lhld    prt$conv$1
  32.     call    do$convt
  33.     lxi    h,prt$buf$1
  34.     mvi    b,4
  35. ;
  36. ;
  37. ;
  38. prt$cont:
  39.     inr    m
  40.     mov    e,m
  41.     mvi    d,0
  42.     xchg
  43.     dad    d        ; index into buffer
  44.     mov    m,a
  45.     xchg
  46. ;    ani    7Fh        ; strip MSB
  47.     cpi    lf        ; data a CR ?
  48.     jrz    print$it    ; yes, go print this line
  49.     mov    a,m        ; no, get current line length
  50.     cpi    prt$buf$lng-1    ; reach end yet ?
  51.     rnz            ; no, exit
  52.                 ; yes, print line of data
  53. print$it:
  54.     mov    a,m
  55.     sta    vic$count    ; set number of bytes to send
  56.     mvi    m,0        ; set count back to zero
  57.     inx    h
  58.     shld    @buffer        ; save location to print from
  59.  
  60.     mov    a,b
  61.     sta    vic$drv        ; pass device # in Vic$drv
  62.     mov    a,c
  63.     sta    vic$trk        ; pass secondary adr in Vic$trk
  64.  
  65.     mvi    a,vic$prt
  66.     jmp    ?fun65
  67. ;
  68. ;
  69. ;
  70. ?convt$none:
  71.     mvi    c,0        ; set secondary adr to 0
  72.     ret
  73. ;
  74. ;
  75. ;
  76. ?convt:
  77.     ani    7fh        ; only allow real ASCII values for now
  78.     cpi    cr
  79.     jrz    set$msb
  80.     cpi    '"'
  81.     jrz    is$quote
  82.     cpi    '@'
  83.     rc
  84.  
  85.     cpi    60h
  86.     jrc    make$upper$case
  87. ;
  88. ; if it is a lower case letter subtract 20h
  89. ;
  90.     cpi    'z'+1
  91.     jrnc    lower$symbols
  92.  
  93.     sui    20h
  94.     ret
  95.  
  96. lower$symbols:
  97.     adi    60h
  98.     ret
  99. ;
  100. ;
  101. make$upper$case:
  102.     cpi    'Z'+1
  103.     jrnc    upper$symbols
  104. set$msb:
  105.     adi    80h
  106.     ret
  107.  
  108. ;
  109. ;
  110. is$quote:
  111.     mvi    a,27h        ; convert to tick (shifted 7)
  112.     ret
  113.  
  114. ;
  115. ;
  116. upper$symbols:
  117.     cpi    '\'
  118.     rnz            ;     
  119.     mvi    a,0ffh
  120. ;
  121. ;    printer initialization code
  122. ;
  123. ?pt$i$1101:
  124.     ret
  125.  
  126.  
  127. ;
  128. ;    printer status code
  129. ;
  130.     dseg
  131. ;?pt$s$1101:
  132. ;    ret
  133.  
  134.  
  135. prt$buf$lng    equ    81
  136.  
  137. prt$buf$1:    ds    prt$buf$lng
  138. prt$buf$2:    ds    prt$buf$lng
  139.  
  140.